package com.test.sh.service.impl;

import com.test.sh.dao.BookShopDao;
import com.test.sh.service.BookShopService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Created with IntelliJ IDEA.
 * Description:
 *
 * @author liuziyang
 * @create 2018-10-06 17:51
 */
@Service("bookShopService")
public class BookShopServiceImpl implements BookShopService {

    @Autowired
    private BookShopDao bookShopDao;

    /**
     * Spring hibernate 事务的流程
     * 1.在方法开始之前
     * ① 获取Session
     * ② 把Session和当前线程绑定，这样就可以在DAO中使用SessionFactory的getCurrentSession()方法来获取Session了
     * ③ 开启事务
     * <p>
     * 2.若方法正常结束，即没有出现异常，则
     * ① 提交事务
     * ② 使和当前线程绑定的Session解除绑定
     * ③ 关闭session
     * <p>
     * 3.若方法出现异常，则
     * ① 回滚事务
     * ② 使和当前线程绑定的Session解除绑定
     * ③ 关闭session
     *
     * @param username
     * @param isbn
     */
    @Override
    public void purchase(String username, String isbn) {
        double price = bookShopDao.findBookPriceByIsbn(isbn);
        bookShopDao.updateBookStock(isbn);
        bookShopDao.updateUserAccount(username, price);
    }
}
